| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- const Product = require('../../../models/product');
- import dbConnect from '../../../utils/helpers/dbHelpers';
-
- const shuffle = function (v) {
- //+ Jonas Raoni Soares Silva
- //@ http://jsfromhell.com/array/shuffle [rev. #1]
-
- for (
- var j, x, i = v.length;
- i;
- j = parseInt(Math.random() * i), x = v[--i], v[i] = v[j], v[j] = x
- );
- return v;
- };
-
- async function handler(req, res) {
- const { method } = req;
-
- await dbConnect();
-
- switch (method) {
- case 'GET': {
- try {
- const productId = req.query.productId;
-
- const product = await Product.findOne({ customID: productId });
-
- if (!product) {
- throw new Error('The product with this id does not exist!');
- }
-
- const similarProducts = await Product.find({
- category: product.category,
- customID: { $ne: product.customID },
- });
-
- const shuffled = similarProducts
- .sort(() => 0.5 - Math.random())
- .slice(0, 3);
-
- res.status(200).json({
- message: 'The product you requested was fetched successfully.',
- product,
- similarProducts: shuffled,
- });
- } catch (error) {
- res.status(400).json({ message: error.message });
- }
- break;
- }
- default:
- res.status(405).json({ message: 'Method not allowed' });
- break;
- }
- }
-
- export default handler;
|